#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include <stdbool.h>

typedef struct Queue
{
    int * pBase;
    int front;
    int rear;
} QUEUE;



queue_init(QUEUE * q);
in_queue(QUEUE * q,int val);
out_queue(QUEUE *q,int * val);
queue_isEmpty(QUEUE * q);
queue_isFull(QUEUE * q);
queue_traverse(QUEUE * q);

/**
队列展示方法
**/

queue_test()
{
    QUEUE q;
    queue_init(&q);
    in_queue(&q,1);
    in_queue(&q,2);
    in_queue(&q,3);
    in_queue(&q,4);
    in_queue(&q,5);
    queue_traverse(&q);
    int rtVal;
    out_queue(&q,&rtVal);
    queue_traverse(&q);


}

queue_init(QUEUE * q)
{

    q->pBase=(int *)malloc(sizeof(int)*6);
    q->front=0;
    q->rear=0;
}

queue_isFull(QUEUE * q)
{

    if((q->rear+1)%6==q->front)
        return true;
    else
        return  false;
}

in_queue(QUEUE * q,int val)
{
    if(queue_isFull(q))
        return ;
    q->pBase[q->rear]=val;
    q->rear=(q->rear+1)%6;

}


out_queue(QUEUE *q,int * val){
    if(queue_isEmpty(q))
        return ;
    printf("out element is: %d\n",q->pBase[q->front]);
    q->front=(q->front+1)%6;


}

queue_isEmpty(QUEUE * q)
{
    if(q->front==q->rear)
        return true;
    else
        return false;

}


queue_traverse(QUEUE * q)
{

    if(queue_isEmpty(q))
        return;
    int i=q->front;
    while(i!=q->rear)
    {
        printf("%d\t",q->pBase[i]);
        i=(i+1)%6;
    }

    printf("\n");

}
